/*
 * Copyright (C) 2021 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import app from '@system.app'
import {describe,beforeAll,beforeEach,afterEach,afterAll,it,expect} from '@ohos/hypium'

export default function webgl1Test_webgl10() {
	describe('webgl1Test_webgl10', function () {
		console.info('webgltest start');
		var gl;
		var gl2;

		var indices = new Uint16Array([0, 1, 2, 1, 3, 4]);
		var vertices = new Uint16Array([
			-0.5, 0.5, 0.0,
			0.0, 0.5, 0.0,
			-0.25, 0.25, 0.0,
			0.5, 0.5, 0.0,
			0.25, 0.25, 0.0,
		])

		//顶点着色器程序
		var VSHADER_SOURCE =
			"attribute vec4 a_Position;" +
			"void main() {" +
			//设置坐标
			"gl_Position = a_Position; " +
			//    "gl_PointSize = 10.0;" +
			"} ";

		//片元着色器
		var FSHADER_SOURCE =
			"void main() {" +
			//设置颜色
			"gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);" +
			"}";

		function globalFunction() {
			const vertexShader = gl.createShader(gl.VERTEX_SHADER);
			gl.shaderSource(vertexShader, VSHADER_SOURCE);
			gl.compileShader(vertexShader);
			const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
			gl.shaderSource(fragmentShader, FSHADER_SOURCE);
			gl.compileShader(fragmentShader);
			const programObj = gl.createProgram();
			console.info("testUseProgram has failed for " + programObj)
			const useProgramError1 = gl.getError();
			console.info("useProgramError: " + useProgramError1);
			const renderBufferValue1 = gl.getParameter(gl.CURRENT_PROGRAM);
			console.info("testUseProgram has failed for " + renderBufferValue1)
			gl.attachShader(programObj, vertexShader);
			gl.attachShader(programObj, fragmentShader);
			gl.linkProgram(programObj);
			gl.useProgram(programObj);
			return programObj;
		}


		function createProgram(gl) {
			//顶点着色器程序
			var VSHADER_SOURCE =
				'attribute vec4 a_Position;\n' +
				'void main() {\n' +
				'  gl_Position = a_Position;\n' +
				'}\n';

			// 片元着色器程序
			var FSHADER_SOURCE =
				'precision mediump float;\n' +
				'uniform vec4 u_FragColor;\n' +
				'void main() {\n' +
				'  gl_FragColor = u_FragColor;\n' +
				'}\n';
			var vertexShader = gl.createShader(gl.VERTEX_SHADER);
			gl.shaderSource(vertexShader, VSHADER_SOURCE);
			gl.compileShader(vertexShader);
			var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
			gl.shaderSource(fragmentShader, FSHADER_SOURCE);
			gl.compileShader(fragmentShader);
			const programObj = gl.createProgram();
			console.log("testUseProgram has failed for " + programObj)
			const useProgramError1 = gl.getError();
			console.info("useProgramError: " + useProgramError1);
			const renderBufferValue1 = gl.getParameter(gl.CURRENT_PROGRAM);
			console.log("testUseProgram has failed for " + renderBufferValue1)
			gl.attachShader(programObj, vertexShader);
			gl.attachShader(programObj, fragmentShader);
			gl.linkProgram(programObj);
			gl.useProgram(programObj);
			return programObj;
		}

		function initShaders(gl, vshader, fshader) {
			var program = createProgramExternal(gl, vshader, fshader);
			console.log("======createProgram program: " + JSON.stringify(program));

			if (!program) {
				console.log('Failed to create program');
				return false;
			}

			gl.useProgram(program);
			gl.program = program;

			return true;
		}

		function createProgramExternal(gl, vshader, fshader) {
			// Create shader object
			var vertexShader = loadShader(gl, gl.VERTEX_SHADER, vshader);
			console.log("======vertexShader: " + vertexShader);
			var fragmentShader = loadShader(gl, gl.FRAGMENT_SHADER, fshader);
			if (!vertexShader || !fragmentShader) {
				return null;
			}

			// Create a program object
			var program = gl.createProgram();
			console.log("======createProgram program: " + JSON.stringify(program));

			if (!program) {
				return null;
			}

			// Attach the shader objects
			gl.attachShader(program, vertexShader);
			gl.attachShader(program, fragmentShader);

			// Link the program object
			gl.linkProgram(program);

			// Check the result of linking
			var linked = gl.getProgramParameter(program, 0x8B82);
			console.log("======getProgramParameter linked: " + linked);

			const getUniformLocationValue = gl.getUniformLocation(program, "a_Position");
			console.log("======getUniformLocation: " + JSON.stringify(getUniformLocationValue));


			if (!linked) {
				var error = gl.getProgramInfoLog(program);
				console.log('Failed to link program: ' + error);
				gl.deleteProgram(program);
				gl.deleteShader(fragmentShader);
				gl.deleteShader(vertexShader);
				return null;
			}

			return program;
		}

		function loadShader(gl, type, source) {
			console.log("======into loadShader====");
			// Create shader object
			var shader = gl.createShader(type);
			if (shader == null) {
				console.log('unable to create shader');
				return null;
			}

			const isShaderValue = gl.isShader(shader);
			console.log('isShader: ' + isShaderValue);

			// Set the shader program
			gl.shaderSource(shader, source);

			// Compile the shader
			gl.compileShader(shader);

			// Check the result of compilation
			var compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
			if (!compiled) {
				var error = gl.getShaderInfoLog(shader);
				console.log('Failed to compile shader: ' + error);
				gl.deleteShader(shader);
				return null;
			}

			var vertex = gl.getShaderParameter(shader, gl.VERTEX_SHADER);
			console.log('getShaderParameter VERTEX_SHADER: ' + vertex);


			return shader;
		}

		function initVertexBuffers(gl) {
			var vertices = new Float32Array([
				0.0, -1.0, -0.5, 0, 0.5, 0
			]);

			var n = 3; // 点的个数

			// 创建缓冲区对象
			var vertexBuffer = gl.createBuffer();
			if (!vertexBuffer) {
				console.log('Failed to create the buffer object');
				return -1;
			}

			// 将缓冲区对象绑定到目标
			gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
			// 向缓冲区对象写入数据
			gl.bufferData(gl.ARRAY_BUFFER, vertices.buffer, gl.STATIC_DRAW);

			var aPosition = gl.getAttribLocation(gl.program, 'a_Position');
			console.info("webgl# getAttribLocation getAttribLocation success:" + JSON.stringify(gl.program));
			console.info("webgl# getAttribLocation getAttribLocation success:" + aPosition);
			if (aPosition < 0) {
				console.log('Failed to get the storage location of a_Position');
				return -1;
			}
			// 将缓冲区对象分配给a_Position变量
			gl.vertexAttribPointer(aPosition, 2, gl.FLOAT, false, 0, 0);

			// 连接a_Position变量与分配给它的缓冲区对象
			gl.enableVertexAttribArray(aPosition);

			return n;
		}


		var float1 = new Float32Array([1.1, 1.2, 1.3, 1.4]);
		var int1 = new Int8Array([1, 1, 1, 1]);
		var uint1 = new Uint8Array([1, 1, 1, 1]);
		var float2 = [1.1, 1.2, 1.3, 1.4];
		var int2 = [1, 1, 1, 1];
		var uint2 = [1, 1, 1, 1];

		function initContext() {
			console.info('initContext start');
			// 获取canvas元素
			const el = global.el;
			const el2 = global.el2;
			// 获取webgl上下文
			gl = el.getContext('webgl');
			if (!gl) {
				console.log('webgltest Failed to get the rendering context for WebGL');
			}
			gl2 = el2.getContext('webgl2');
			if (!gl) {
				console.log('webgltest Failed to get the rendering context for WebGL2');
			}
			console.info('webgltest initContext finish');
		}

		function deleteContext() {
			if (gl != null) {
				gl = null;
				console.info("webgltest gl has null");
			}
			if (gl2 != null) {
				console.info("webgltest gl2 has null");
				gl2 = null;
			}
		}

		/**
		 * run before testClass
		 */
		beforeAll(async function (done) {
			console.info('webgltest beforeAll called');
			initContext();
			done();
		});

		/**
		 * run after testClass
		 */
		afterAll(async function (done) {
			console.info('webgltest afterEach called');
			deleteContext();
			done();
		})


		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_0100
		 * @tc.name testTexImage2D_1_04
		 * @tc.desc Test texImage2D.
		 */
		it('testTexImage2D_1_04', 0, async function (done) {
			
			console.info('jsWebGL testTexImage2D_1_04 test start ...66');
			const buffer = new ArrayBuffer(8);
			const z = new Uint8Array(buffer, 1, 4);
			gl.texImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, gl.RGB8, 512, 512, 0, gl.RGB8, gl
				.UNSIGNED_BYTE, z);
			const texImage2DError = gl.getError();
			console.info("texImage2DError: " + texImage2DError);
			expect(texImage2DError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_0200
		 * @tc.name testTexImage2D_1_05
		 * @tc.desc Test texImage2D.
		 */
		it('testTexImage2D_1_05', 0, async function (done) {
			
			console.info('jsWebGL testTexImage2D_1_05 test start ...66');
			const buffer = new ArrayBuffer(8);
			const z = new Uint8Array(buffer, 1, 4);
			gl.texImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_Z, 0, gl.RGB8, 512, 512, 0, gl.RGB8, gl
				.UNSIGNED_BYTE, z);
			const texImage2DError = gl.getError();
			console.info("texImage2DError: " + texImage2DError);
			expect(texImage2DError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_0300
		 * @tc.name testTexImage2D_1_06
		 * @tc.desc Test texImage2D.
		 */
		it('testTexImage2D_1_06', 0, async function (done) {
			
			console.info('jsWebGL testTexImage2D_1_06 test start ...66');
			const buffer = new ArrayBuffer(8);
			const z = new Uint8Array(buffer, 1, 4);
			gl.texImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, gl.RGB8, 512, 512, 0, gl.RGB8, gl
				.UNSIGNED_BYTE, z);
			const texImage2DError = gl.getError();
			console.info("texImage2DError: " + texImage2DError);
			expect(texImage2DError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_0400
		 * @tc.name testTexImage2D_1_07
		 * @tc.desc Test texImage2D.
		 */
		it('testTexImage2D_1_07', 0, async function (done) {
			
			console.info('jsWebGL testTexImage2D_1_07 test start ...66');
			const buffer = new ArrayBuffer(8);
			const z = new Uint8Array(buffer, 1, 4);
			gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGB8, 512, 512, 0, gl.RGB8, gl.UNSIGNED_BYTE, z);
			const texImage2DError = gl.getError();
			console.info("texImage2DError: " + texImage2DError);
			expect(texImage2DError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_0500
		 * @tc.name testTexSubImage2D_1_01
		 * @tc.desc Test texSubImage2D.
		 */
		it('testTexSubImage2D_1_01', 0, async function (done) {
			
			console.info('jsWebGL testTexSubImage2D_1_01 test start ...66');
			const buf = new ArrayBuffer(8);
			const view = new DataView(buf, 0);
			view[0] = 2;
			gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_X, 0, 0, 0, 512, 512, -gl.RED, -gl.FLOAT,
				view);
			const ttexSubImage2DError = gl.getError();
			console.info("ttexSubImage2DError: " + ttexSubImage2DError);
			expect(ttexSubImage2DError).assertLarger(gl.NO_ERROR);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_0600
		 * @tc.name testTexSubImage2D_1_02
		 * @tc.desc Test texSubImage2D.
		 */
		it('testTexSubImage2D_1_02', 0, async function (done) {
			
			console.info('jsWebGL testTexSubImage2D_1_02 test start ...66');
			const buf = new ArrayBuffer(8);
			const view = new DataView(buf, 0);
			view[0] = 2;
			gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_X, 0, 0, 0, 512, 512, -gl.RED, -gl.FLOAT,
				view);
			const ttexSubImage2DError = gl.getError();
			console.info("ttexSubImage2DError: " + ttexSubImage2DError);
			expect(ttexSubImage2DError).assertLarger(gl.NO_ERROR);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_0700
		 * @tc.name testTexSubImage2D_1_03
		 * @tc.desc Test texSubImage2D.
		 */
		it('testTexSubImage2D_1_03', 0, async function (done) {
			
			console.info('jsWebGL testTexSubImage2D_1_03 test start ...66');
			const buf = new ArrayBuffer(8);
			const view = new DataView(buf, 0);
			view[0] = 2;
			gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_Y, 0, 0, 0, 512, 512, -gl.RED, -gl.FLOAT,
				view);
			const ttexSubImage2DError = gl.getError();
			console.info("ttexSubImage2DError: " + ttexSubImage2DError);
			expect(ttexSubImage2DError).assertLarger(gl.NO_ERROR);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_0800
		 * @tc.name testTexSubImage2D_1_04
		 * @tc.desc Test texSubImage2D.
		 */
		it('testTexSubImage2D_1_04', 0, async function (done) {
			
			console.info('jsWebGL testTexSubImage2D_1_04 test start ...66');
			const buf = new ArrayBuffer(8);
			const view = new DataView(buf, 0);
			view[0] = 2;
			gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, 0, 0, 512, 512, -gl.RED, -gl.FLOAT,
				view);
			const ttexSubImage2DError = gl.getError();
			console.info("ttexSubImage2DError: " + ttexSubImage2DError);
			expect(ttexSubImage2DError).assertLarger(gl.NO_ERROR);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_0900
		 * @tc.name testTexSubImage2D_1_05
		 * @tc.desc Test texSubImage2D.
		 */
		it('testTexSubImage2D_1_05', 0, async function (done) {
			
			console.info('jsWebGL testTexSubImage2D_1_05 test start ...66');
			const buf = new ArrayBuffer(8);
			const view = new DataView(buf, 0);
			view[0] = 2;
			gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_POSITIVE_Z, 0, 0, 0, 512, 512, -gl.RED, -gl.FLOAT,
				view);
			const ttexSubImage2DError = gl.getError();
			console.info("ttexSubImage2DError: " + ttexSubImage2DError);
			expect(ttexSubImage2DError).assertLarger(gl.NO_ERROR);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_1000
		 * @tc.name testTexSubImage2D_1_06
		 * @tc.desc Test texSubImage2D.
		 */
		it('testTexSubImage2D_1_06', 0, async function (done) {
			
			console.info('jsWebGL testTexSubImage2D_1_06 test start ...66');
			const buf = new ArrayBuffer(8);
			const view = new DataView(buf, 0);
			view[0] = 2;
			gl.texSubImage2D(gl.TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, 0, 0, 512, 512, -gl.RED, -gl.FLOAT,
				view);
			const ttexSubImage2DError = gl.getError();
			console.info("ttexSubImage2DError: " + ttexSubImage2DError);
			expect(ttexSubImage2DError).assertLarger(gl.NO_ERROR);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_1100
		 * @tc.name testCopyBufferSubData_1_02
		 * @tc.desc Test copyBufferSubData.
		 */
		it('testCopyBufferSubData_1_02', 0, async function (done) {
			
			console.info('jsWebGL testCopyBufferSubData_1_02 test start ...66');
			const srcBuffer = gl.createBuffer();
			const dstBuffer = gl.createBuffer();
			const vertices = [1, 2];
			const data = new Float32Array(vertices);
			const length = vertices.length * 4;
			gl.bindBuffer(gl.ARRAY_BUFFER, srcBuffer);
			gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
			gl.bindBuffer(gl.COPY_READ_BUFFER, srcBuffer);
			gl.bindBuffer(gl.ARRAY_BUFFER, dstBuffer);
			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(length), gl.STATIC_DRAW);
			gl2.copyBufferSubData(gl.COPY_READ_BUFFER, gl.ARRAY_BUFFER, 0, 0, length);
			const copyBufferSubDataError = gl.getError();
			console.info("copyBufferSubDataError: " + copyBufferSubDataError);
			expect(copyBufferSubDataError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_1200
		 * @tc.name testCopyBufferSubData_1_03
		 * @tc.desc Test copyBufferSubData.
		 */
		it('testCopyBufferSubData_1_03', 0, async function (done) {
			
			console.info('jsWebGL testCopyBufferSubData_1_03 test start ...66');
			const srcBuffer = gl.createBuffer();
			const dstBuffer = gl.createBuffer();
			const vertices = [1, 2];
			const data = new Float32Array(vertices);
			const length = vertices.length * 4;
			gl.bindBuffer(gl.ARRAY_BUFFER, srcBuffer);
			gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
			gl.bindBuffer(gl.COPY_READ_BUFFER, srcBuffer);
			gl.bindBuffer(gl.ARRAY_BUFFER, dstBuffer);
			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(length), gl.STATIC_DRAW);
			gl2.copyBufferSubData(gl.COPY_WRITE_BUFFER, gl.ARRAY_BUFFER, 0, 0, length);
			const copyBufferSubDataError = gl.getError();
			console.info("copyBufferSubDataError: " + copyBufferSubDataError);
			expect(copyBufferSubDataError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_1300
		 * @tc.name testCopyBufferSubData_1_04
		 * @tc.desc Test copyBufferSubData.
		 */
		it('testCopyBufferSubData_1_04', 0, async function (done) {
			
			console.info('jsWebGL testCopyBufferSubData_1_04 test start ...66');
			const srcBuffer = gl.createBuffer();
			const dstBuffer = gl.createBuffer();
			const vertices = [1, 2];
			const data = new Float32Array(vertices);
			const length = vertices.length * 4;
			gl.bindBuffer(gl.ARRAY_BUFFER, srcBuffer);
			gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
			gl.bindBuffer(gl.COPY_READ_BUFFER, srcBuffer);
			gl.bindBuffer(gl.ARRAY_BUFFER, dstBuffer);
			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(length), gl.STATIC_DRAW);
			gl2.copyBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, gl.ARRAY_BUFFER, 0, 0, length);
			const copyBufferSubDataError = gl.getError();
			console.info("copyBufferSubDataError: " + copyBufferSubDataError);
			expect(copyBufferSubDataError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_1400
		 * @tc.name testCopyBufferSubData_1_05
		 * @tc.desc Test copyBufferSubData.
		 */
		it('testCopyBufferSubData_1_05', 0, async function (done) {
			
			console.info('jsWebGL testCopyBufferSubData_1_05 test start ...66');
			const srcBuffer = gl.createBuffer();
			const dstBuffer = gl.createBuffer();
			const vertices = [1, 2];
			const data = new Float32Array(vertices);
			const length = vertices.length * 4;
			gl.bindBuffer(gl.ARRAY_BUFFER, srcBuffer);
			gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
			gl.bindBuffer(gl.COPY_READ_BUFFER, srcBuffer);
			gl.bindBuffer(gl.ARRAY_BUFFER, dstBuffer);
			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(length), gl.STATIC_DRAW);
			gl2.copyBufferSubData(gl.UNIFORM_BUFFER, gl.ARRAY_BUFFER, 0, 0, length);
			const copyBufferSubDataError = gl.getError();
			console.info("copyBufferSubDataError: " + copyBufferSubDataError);
			expect(copyBufferSubDataError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_1500
		 * @tc.name testCopyBufferSubData_1_06
		 * @tc.desc Test copyBufferSubData.
		 */
		it('testCopyBufferSubData_1_06', 0, async function (done) {
			
			console.info('jsWebGL testCopyBufferSubData_1_06 test start ...66');
			const srcBuffer = gl.createBuffer();
			const dstBuffer = gl.createBuffer();
			const vertices = [1, 2];
			const data = new Float32Array(vertices);
			const length = vertices.length * 4;
			gl.bindBuffer(gl.ARRAY_BUFFER, srcBuffer);
			gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
			gl.bindBuffer(gl.COPY_READ_BUFFER, srcBuffer);
			gl.bindBuffer(gl.ARRAY_BUFFER, dstBuffer);
			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(length), gl.STATIC_DRAW);
			gl2.copyBufferSubData(gl.PIXEL_PACK_BUFFER, gl.ARRAY_BUFFER, 0, 0, length);
			const copyBufferSubDataError = gl.getError();
			console.info("copyBufferSubDataError: " + copyBufferSubDataError);
			expect(copyBufferSubDataError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_1600
		 * @tc.name testCopyBufferSubData_1_07
		 * @tc.desc Test copyBufferSubData.
		 */
		it('testCopyBufferSubData_1_07', 0, async function (done) {
			
			console.info('jsWebGL testCopyBufferSubData_1_07 test start ...66');
			const srcBuffer = gl.createBuffer();
			const dstBuffer = gl.createBuffer();
			const vertices = [1, 2];
			const data = new Float32Array(vertices);
			const length = vertices.length * 4;
			gl.bindBuffer(gl.ARRAY_BUFFER, srcBuffer);
			gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);
			gl.bindBuffer(gl.COPY_READ_BUFFER, srcBuffer);
			gl.bindBuffer(gl.ARRAY_BUFFER, dstBuffer);
			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(length), gl.STATIC_DRAW);
			gl2.copyBufferSubData(gl.PIXEL_UNPACK_BUFFER, gl.ARRAY_BUFFER, 0, 0, length);
			const copyBufferSubDataError = gl.getError();
			console.info("copyBufferSubDataError: " + copyBufferSubDataError);
			expect(copyBufferSubDataError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_1700
		 * @tc.name testGetBufferSubData_1_02
		 * @tc.desc Test getBufferSubData.
		 */
		it('testGetBufferSubData_1_02', 0, async function (done) {
			
			console.info('jsWebGL testGetBufferSubData_1_02 test start ...66');
			var buffer = gl.createBuffer();
			gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
			const vertices = [1, 2];
			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
			var arrBuffer = new ArrayBuffer(vertices.length * Float32Array.BYTES_PER_ELEMENT);
			gl2.getBufferSubData(gl.COPY_READ_BUFFER, 0, new Float32Array(arrBuffer), 0, 0);
			const getBufferSubDataError = gl.getError();
			console.info("getBufferSubDataError: " + getBufferSubDataError);
			expect(getBufferSubDataError).assertEqual(gl.INVALID_ENUM);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_1800
		 * @tc.name testGetBufferSubData_1_03
		 * @tc.desc Test getBufferSubData.
		 */
		it('testGetBufferSubData_1_03', 0, async function (done) {
			
			console.info('jsWebGL testGetBufferSubData_1_03 test start ...66');
			var buffer = gl.createBuffer();
			gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
			const vertices = [1, 2];
			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
			var arrBuffer = new ArrayBuffer(vertices.length * Float32Array.BYTES_PER_ELEMENT);
			gl2.getBufferSubData(gl.COPY_WRITE_BUFFER, 0, new Float32Array(arrBuffer), 0, 0);
			const getBufferSubDataError = gl.getError();
			console.info("getBufferSubDataError: " + getBufferSubDataError);
			expect(getBufferSubDataError).assertEqual(gl.INVALID_ENUM);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_1900
		 * @tc.name testGetBufferSubData_1_04
		 * @tc.desc Test getBufferSubData.
		 */
		it('testGetBufferSubData_1_04', 0, async function (done) {
			
			console.info('jsWebGL testGetBufferSubData_1_04 test start ...66');
			var buffer = gl.createBuffer();
			gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
			const vertices = [1, 2];
			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
			var arrBuffer = new ArrayBuffer(vertices.length * Float32Array.BYTES_PER_ELEMENT);
			gl2.getBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, 0, new Float32Array(arrBuffer), 0, 0);
			const getBufferSubDataError = gl.getError();
			console.info("getBufferSubDataError: " + getBufferSubDataError);
			expect(getBufferSubDataError).assertEqual(gl.INVALID_ENUM);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_2000
		 * @tc.name testGetBufferSubData_1_05
		 * @tc.desc Test getBufferSubData.
		 */
		it('testGetBufferSubData_1_05', 0, async function (done) {
			
			console.info('jsWebGL testGetBufferSubData_1_05 test start ...66');
			var buffer = gl.createBuffer();
			gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
			const vertices = [1, 2];
			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
			var arrBuffer = new ArrayBuffer(vertices.length * Float32Array.BYTES_PER_ELEMENT);
			gl2.getBufferSubData(gl.UNIFORM_BUFFER, 0, new Float32Array(arrBuffer), 0, 0);
			const getBufferSubDataError = gl.getError();
			console.info("getBufferSubDataError: " + getBufferSubDataError);
			expect(getBufferSubDataError).assertEqual(gl.INVALID_ENUM);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_2100
		 * @tc.name testGetBufferSubData_1_06
		 * @tc.desc Test getBufferSubData.
		 */
		it('testGetBufferSubData_1_06', 0, async function (done) {
			
			console.info('jsWebGL testGetBufferSubData_1_06 test start ...66');
			var buffer = gl.createBuffer();
			gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
			const vertices = [1, 2];
			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
			var arrBuffer = new ArrayBuffer(vertices.length * Float32Array.BYTES_PER_ELEMENT);
			gl2.getBufferSubData(gl.PIXEL_PACK_BUFFER, 0, new Float32Array(arrBuffer), 0, 0);
			const getBufferSubDataError = gl.getError();
			console.info("getBufferSubDataError: " + getBufferSubDataError);
			expect(getBufferSubDataError).assertEqual(gl.INVALID_ENUM);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_2200
		 * @tc.name testGetBufferSubData_1_07
		 * @tc.desc Test getBufferSubData.
		 */
		it('testGetBufferSubData_1_07', 0, async function (done) {
			
			console.info('jsWebGL testGetBufferSubData_1_07 test start ...66');
			var buffer = gl.createBuffer();
			gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
			const vertices = [1, 2];
			gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
			var arrBuffer = new ArrayBuffer(vertices.length * Float32Array.BYTES_PER_ELEMENT);
			gl2.getBufferSubData(gl.PIXEL_UNPACK_BUFFER, 0, new Float32Array(arrBuffer), 0, 0);
			const getBufferSubDataError = gl.getError();
			console.info("getBufferSubDataError: " + getBufferSubDataError);
			expect(getBufferSubDataError).assertEqual(gl.INVALID_ENUM);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_2300
		 * @tc.name testFramebufferTextureLayer_1_01
		 * @tc.desc Test framebufferTextureLayer.
		 */
		it('testFramebufferTextureLayer_1_01', 0, async function (done) {
			
			console.info('jsWebGL testFramebufferTextureLayer_1_01 test start ...66');
			const texture = gl.createTexture();
			gl.bindTexture(gl2.TEXTURE_2D_ARRAY, texture);
			gl2.texStorage3D(gl2.TEXTURE_2D_ARRAY, 1, gl2.RGBA8, 256, 256, 8);
			gl.texParameteri(gl2.TEXTURE_CUBE_MAP, gl2.TEXTURE_MAG_FILTER, gl2.NEAREST);
			const framebuffer = gl.createFramebuffer();
			gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
			gl2.framebufferTextureLayer(gl2.DRAW_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, texture, 0, 8)
			const framebufferTextureLayerError = gl.getError();
			console.info("framebufferTextureLayerError: " + framebufferTextureLayerError);
			var openGLVersion = gl.getParameter(gl.VERSION);
			console.info("openGLVersion: " + openGLVersion);
			var version = "OpenGL,ES,3";
			if (openGLVersion > version) {
			    expect(framebufferTextureLayerError).assertEqual(0);
			} else {
			    expect(framebufferTextureLayerError).assertEqual(gl.INVALID_ENUM);
			}
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_2400
		 * @tc.name testFramebufferTextureLayer_1_02
		 * @tc.desc Test framebufferTextureLayer.
		 */
		it('testFramebufferTextureLayer_1_02', 0, async function (done) {
			
			console.info('jsWebGL testFramebufferTextureLayer_1_02 test start ...66');
			const texture = gl.createTexture();
			gl.bindTexture(gl2.TEXTURE_2D_ARRAY, texture);
			gl2.texStorage3D(gl2.TEXTURE_2D_ARRAY, 1, gl2.RGBA8, 256, 256, 8);
			gl.texParameteri(gl2.TEXTURE_CUBE_MAP, gl2.TEXTURE_MAG_FILTER, gl2.NEAREST);
			const framebuffer = gl.createFramebuffer();
			gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
			gl2.framebufferTextureLayer(gl2.READ_FRAMEBUFFER, gl.COLOR_ATTACHMENT0, texture, 0, 8)
			const framebufferTextureLayerError = gl.getError();
			console.info("framebufferTextureLayerError: " + framebufferTextureLayerError);
			var openGLVersion = gl.getParameter(gl.VERSION);
			console.info("openGLVersion: " + openGLVersion);
			var version = "OpenGL,ES,3";
			if (openGLVersion > version) {
			    expect(framebufferTextureLayerError).assertEqual(0);
			} else {
			    expect(framebufferTextureLayerError).assertEqual(gl.INVALID_ENUM);
			}
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_2500
		 * @tc.name testFramebufferTextureLayer_1_03
		 * @tc.desc Test framebufferTextureLayer.
		 */
		it('testFramebufferTextureLayer_1_03', 0, async function (done) {
			
			console.info('jsWebGL testFramebufferTextureLayer_1_03 test start ...66');
			const texture = gl.createTexture();
			gl.bindTexture(gl2.TEXTURE_2D_ARRAY, texture);
			gl2.texStorage3D(gl2.TEXTURE_2D_ARRAY, 1, gl2.RGBA8, 256, 256, 8);
			gl.texParameteri(gl2.TEXTURE_CUBE_MAP, gl2.TEXTURE_MAG_FILTER, gl2.NEAREST);
			const framebuffer = gl.createFramebuffer();
			gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
			gl2.framebufferTextureLayer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, texture, 0, 8)
			const framebufferTextureLayerError = gl.getError();
			console.info("framebufferTextureLayerError: " + framebufferTextureLayerError);
			var openGLVersion = gl.getParameter(gl.VERSION);
			console.info("openGLVersion: " + openGLVersion);
			var version = "OpenGL,ES,3";
			if (openGLVersion > version) {
			    expect(framebufferTextureLayerError).assertEqual(0);
			} else {
			    expect(framebufferTextureLayerError).assertEqual(gl.INVALID_OPERATION);
			}
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_2600
		 * @tc.name testFramebufferTextureLayer_1_04
		 * @tc.desc Test framebufferTextureLayer.
		 */
		it('testFramebufferTextureLayer_1_04', 0, async function (done) {
			
			console.info('jsWebGL testFramebufferTextureLayer_1_04 test start ...66');
			const texture = gl.createTexture();
			gl.bindTexture(gl2.TEXTURE_2D_ARRAY, texture);
			gl2.texStorage3D(gl2.TEXTURE_2D_ARRAY, 1, gl2.RGBA8, 256, 256, 8);
			gl.texParameteri(gl2.TEXTURE_CUBE_MAP, gl2.TEXTURE_MAG_FILTER, gl2.NEAREST);
			const framebuffer = gl.createFramebuffer();
			gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
			gl2.framebufferTextureLayer(gl.FRAMEBUFFER, gl.STENCIL_ATTACHMENT, texture, 0, 8)
			const framebufferTextureLayerError = gl.getError();
			console.info("framebufferTextureLayerError: " + framebufferTextureLayerError);
			var openGLVersion = gl.getParameter(gl.VERSION);
			console.info("openGLVersion: " + openGLVersion);
			var version = "OpenGL,ES,3";
			if (openGLVersion > version) {
			    expect(framebufferTextureLayerError).assertEqual(0);
			} else {
			    expect(framebufferTextureLayerError).assertEqual(gl.INVALID_OPERATION);
			}
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_2700
		 * @tc.name testFramebufferTextureLayer_1_05
		 * @tc.desc Test framebufferTextureLayer.
		 */
		it('testFramebufferTextureLayer_1_05', 0, async function (done) {
			
			console.info('jsWebGL testFramebufferTextureLayer_1_05 test start ...66');
			const texture = gl.createTexture();
			gl.bindTexture(gl2.TEXTURE_2D_ARRAY, texture);
			gl2.texStorage3D(gl2.TEXTURE_2D_ARRAY, 1, gl2.RGBA8, 256, 256, 8);
			gl.texParameteri(gl2.TEXTURE_CUBE_MAP, gl2.TEXTURE_MAG_FILTER, gl2.NEAREST);
			const framebuffer = gl.createFramebuffer();
			gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
			gl2.framebufferTextureLayer(gl.FRAMEBUFFER, gl.DEPTH_STENCIL_ATTACHMENT, texture, 0, 8)
			const framebufferTextureLayerError = gl.getError();
			console.info("framebufferTextureLayerError: " + framebufferTextureLayerError);
			var openGLVersion = gl.getParameter(gl.VERSION);
			console.info("openGLVersion: " + openGLVersion);
			var version = "OpenGL,ES,3";
			if (openGLVersion > version) {
			    expect(framebufferTextureLayerError).assertEqual(0);
			} else {
			    expect(framebufferTextureLayerError).assertEqual(gl.INVALID_ENUM);
			}
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_2800
		 * @tc.name testInvalidateFramebuffer_1_01
		 * @tc.desc Test invalidateFramebuffer.
		 */
		it('testInvalidateFramebuffer_1_01', 0, async function (done) {
			
			console.info('jsWebGL testInvalidateFramebuffer_1_01 test start ...66');
			gl2.invalidateFramebuffer(gl.DRAW_FRAMEBUFFER,
				[gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]);
			const invalidateFramebufferError = gl.getError();
			console.info("invalidateFramebufferError: " + invalidateFramebufferError);
			expect(invalidateFramebufferError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_2900
		 * @tc.name testInvalidateFramebuffer_1_02
		 * @tc.desc Test invalidateFramebuffer.
		 */
		it('testInvalidateFramebuffer_1_02', 0, async function (done) {
			
			console.info('jsWebGL testInvalidateFramebuffer_1_02 test start ...66');
			gl2.invalidateFramebuffer(gl.FRAMEBUFFER,
				[gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]);
			const invalidateFramebufferError = gl.getError();
			console.info("invalidateFramebufferError: " + invalidateFramebufferError);
			expect(invalidateFramebufferError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_3000
		 * @tc.name testInvalidateFramebuffer_1_03
		 * @tc.desc Test invalidateFramebuffer.
		 */
		it('testInvalidateFramebuffer_1_03', 0, async function (done) {
			
			console.info('jsWebGL testInvalidateFramebuffer_1_03 test start ...66');
			gl2.invalidateFramebuffer(gl.READ_FRAMEBUFFER,
				[gl.COLOR_ATTACHMENT0, gl.DEPTH_ATTACHMENT]);
			const invalidateFramebufferError = gl.getError();
			console.info("invalidateFramebufferError: " + invalidateFramebufferError);
			expect(invalidateFramebufferError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_3100
		 * @tc.name testInvalidateFramebuffer_1_04
		 * @tc.desc Test invalidateFramebuffer.
		 */
		it('testInvalidateFramebuffer_1_04', 0, async function (done) {
			
			console.info('jsWebGL testInvalidateFramebuffer_1_04 test start ...66');
			gl2.invalidateFramebuffer(gl.READ_FRAMEBUFFER,
				[gl.STENCIL_ATTACHMENT, gl.COLOR_ATTACHMENT1]);
			const invalidateFramebufferError = gl.getError();
			console.info("invalidateFramebufferError: " + invalidateFramebufferError);
			expect(invalidateFramebufferError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_3200
		 * @tc.name testInvalidateFramebuffer_1_05
		 * @tc.desc Test invalidateFramebuffer.
		 */
		it('testInvalidateFramebuffer_1_05', 0, async function (done) {
			
			console.info('jsWebGL testInvalidateFramebuffer_1_05 test start ...66');
			gl2.invalidateFramebuffer(gl.READ_FRAMEBUFFER,
				[gl.DEPTH_STENCIL_ATTACHMENT, gl.COLOR_ATTACHMENT1]);
			const invalidateFramebufferError = gl.getError();
			console.info("invalidateFramebufferError: " + invalidateFramebufferError);
			expect(invalidateFramebufferError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_3300
		 * @tc.name testInvalidateFramebuffer_1_06
		 * @tc.desc Test invalidateFramebuffer.
		 */
		it('testInvalidateFramebuffer_1_06', 0, async function (done) {
			
			console.info('jsWebGL testInvalidateFramebuffer_1_06 test start ...66');
			gl2.invalidateFramebuffer(gl.READ_FRAMEBUFFER,
				[gl.DEPTH_ATTACHMENT, gl.STENCIL_ATTACHMENT]);
			const invalidateFramebufferError = gl.getError();
			console.info("invalidateFramebufferError: " + invalidateFramebufferError);
			expect(invalidateFramebufferError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_3400
		 * @tc.name testInvalidateFramebuffer_1_07
		 * @tc.desc Test invalidateFramebuffer.
		 */
		it('testInvalidateFramebuffer_1_07', 0, async function (done) {
			
			console.info('jsWebGL testInvalidateFramebuffer_1_07 test start ...66');
			gl2.invalidateFramebuffer(gl.READ_FRAMEBUFFER,
				[gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1]);
			const invalidateFramebufferError = gl.getError();
			console.info("invalidateFramebufferError: " + invalidateFramebufferError);
			expect(invalidateFramebufferError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_3500
		 * @tc.name testInvalidateSubFramebuffer_1_01
		 * @tc.desc Test invalidateSubFramebuffer.
		 */
		it('testInvalidateSubFramebuffer_1_01', 0, async function (done) {
			
			console.info('jsWebGL testInvalidateSubFramebuffer_1_01 test start ...66');
			gl2.invalidateSubFramebuffer(gl.FRAMEBUFFER,
				[gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1],
				0, 0, 256, 256);
			const invalidateSubFramebufferError = gl.getError();
			console.info("invalidateSubFramebufferError: " + invalidateSubFramebufferError);
			expect(invalidateSubFramebufferError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_3600
		 * @tc.name testInvalidateSubFramebuffer_1_02
		 * @tc.desc Test invalidateSubFramebuffer.
		 */
		it('testInvalidateSubFramebuffer_1_02', 0, async function (done) {
			
			console.info('jsWebGL testInvalidateSubFramebuffer_1_02 test start ...66');
			gl2.invalidateSubFramebuffer(gl.DRAW_FRAMEBUFFER,
				[gl.COLOR_ATTACHMENT0, gl.COLOR_ATTACHMENT1],
				0, 0, 256, 256);
			const invalidateSubFramebufferError = gl.getError();
			console.info("invalidateSubFramebufferError: " + invalidateSubFramebufferError);
			expect(invalidateSubFramebufferError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_3700
		 * @tc.name testInvalidateSubFramebuffer_1_03
		 * @tc.desc Test invalidateSubFramebuffer.
		 */
		it('testInvalidateSubFramebuffer_1_03', 0, async function (done) {
			
			console.info('jsWebGL testInvalidateSubFramebuffer_1_03 test start ...66');
			gl2.invalidateSubFramebuffer(gl.READ_FRAMEBUFFER,
				[gl.DEPTH_ATTACHMENT, gl.COLOR_ATTACHMENT1],
				0, 0, 256, 256);
			const invalidateSubFramebufferError = gl.getError();
			console.info("invalidateSubFramebufferError: " + invalidateSubFramebufferError);
			expect(invalidateSubFramebufferError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_3800
		 * @tc.name testInvalidateSubFramebuffer_1_04
		 * @tc.desc Test invalidateSubFramebuffer.
		 */
		it('testInvalidateSubFramebuffer_1_04', 0, async function (done) {
			
			console.info('jsWebGL testInvalidateSubFramebuffer_1_04 test start ...66');
			gl2.invalidateSubFramebuffer(gl.READ_FRAMEBUFFER,
				[gl.COLOR_ATTACHMENT0, gl.STENCIL_ATTACHMENT],
				0, 0, 256, 256);
			const invalidateSubFramebufferError = gl.getError();
			console.info("invalidateSubFramebufferError: " + invalidateSubFramebufferError);
			expect(invalidateSubFramebufferError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_3900
		 * @tc.name testInvalidateSubFramebuffer_1_05
		 * @tc.desc Test invalidateSubFramebuffer.
		 */
		it('testInvalidateSubFramebuffer_1_05', 0, async function (done) {
			
			console.info('jsWebGL testInvalidateSubFramebuffer_1_05 test start ...66');
			gl2.invalidateSubFramebuffer(gl.READ_FRAMEBUFFER,
				[gl.DEPTH_STENCIL_ATTACHMENT, gl.STENCIL_ATTACHMENT],
				0, 0, 256, 256);
			const invalidateSubFramebufferError = gl.getError();
			console.info("invalidateSubFramebufferError: " + invalidateSubFramebufferError);
			expect(invalidateSubFramebufferError).assertEqual(0);
			done();
		})


		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_4000
		 * @tc.name testRenderbufferStorageMultisample_1_01
		 * @tc.desc Test renderbufferStorageMultisample.
		 */
		it('testRenderbufferStorageMultisample_1_01', 0, async function (done) {
			
			console.info('jsWebGL testRenderbufferStorageMultisample_1_01 test start ...66');
			gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R8, 256, 256);
			const renderbufferStorageMultisampleError = gl.getError();
			console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
			expect(renderbufferStorageMultisampleError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_4100
		 * @tc.name testRenderbufferStorageMultisample_1_02
		 * @tc.desc Test renderbufferStorageMultisample.
		 */
		it('testRenderbufferStorageMultisample_1_02', 0, async function (done) {
			
			console.info('jsWebGL testRenderbufferStorageMultisample_1_02 test start ...66');
			gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R8UI, 256, 256);
			const renderbufferStorageMultisampleError = gl.getError();
			console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
			expect(renderbufferStorageMultisampleError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_4200
		 * @tc.name testRenderbufferStorageMultisample_1_03
		 * @tc.desc Test renderbufferStorageMultisample.
		 */
		it('testRenderbufferStorageMultisample_1_03', 0, async function (done) {
			
			console.info('jsWebGL testRenderbufferStorageMultisample_1_03 test start ...66');
			gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R8I, 256, 256);
			const renderbufferStorageMultisampleError = gl.getError();
			console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
			expect(renderbufferStorageMultisampleError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_4300
		 * @tc.name testRenderbufferStorageMultisample_1_04
		 * @tc.desc Test renderbufferStorageMultisample.
		 */
		it('testRenderbufferStorageMultisample_1_04', 0, async function (done) {
			
			console.info('jsWebGL testRenderbufferStorageMultisample_1_04 test start ...66');
			gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R16UI, 256, 256);
			const renderbufferStorageMultisampleError = gl.getError();
			console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
			expect(renderbufferStorageMultisampleError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_4400
		 * @tc.name testRenderbufferStorageMultisample_1_05
		 * @tc.desc Test renderbufferStorageMultisample.
		 */
		it('testRenderbufferStorageMultisample_1_05', 0, async function (done) {
			
			console.info('jsWebGL testRenderbufferStorageMultisample_1_05 test start ...66');
			gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R16I, 256, 256);
			const renderbufferStorageMultisampleError = gl.getError();
			console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
			expect(renderbufferStorageMultisampleError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_4500
		 * @tc.name testRenderbufferStorageMultisample_1_06
		 * @tc.desc Test renderbufferStorageMultisample.
		 */
		it('testRenderbufferStorageMultisample_1_06', 0, async function (done) {
			
			console.info('jsWebGL testRenderbufferStorageMultisample_1_06 test start ...66');
			gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R32UI, 256, 256);
			const renderbufferStorageMultisampleError = gl.getError();
			console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
			expect(renderbufferStorageMultisampleError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_4600
		 * @tc.name testRenderbufferStorageMultisample_1_07
		 * @tc.desc Test renderbufferStorageMultisample.
		 */
		it('testRenderbufferStorageMultisample_1_07', 0, async function (done) {
			
			console.info('jsWebGL testRenderbufferStorageMultisample_1_07 test start ...66');
			gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.R32I, 256, 256);
			const renderbufferStorageMultisampleError = gl.getError();
			console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
			expect(renderbufferStorageMultisampleError).assertEqual(0);
			done();
		})


		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_4700
		 * @tc.name testRenderbufferStorageMultisample_1_08
		 * @tc.desc Test renderbufferStorageMultisample.
		 */
		it('testRenderbufferStorageMultisample_1_08', 0, async function (done) {
			
			console.info('jsWebGL testRenderbufferStorageMultisample_1_08 test start ...66');
			gl2.renderbufferStorageMultisample(gl.RENDERBUFFER, 4, gl.RG8, 256, 256);
			const renderbufferStorageMultisampleError = gl.getError();
			console.info("renderbufferStorageMultisampleError: " + renderbufferStorageMultisampleError);
			expect(renderbufferStorageMultisampleError).assertEqual(0);
			done();
		})


		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_4800
		 * @tc.name testTexStorage2D_1_01
		 * @tc.desc Test texStorage2D.
		 */
		it('testTexStorage2D_1_01', 0, async function (done) {
			
			console.info('jsWebGL testTexStorage2D_1_01 test start ...66');
			gl2.texStorage2D(gl.TEXTURE_CUBE_MAP, 1, gl.RGB8, 256, 256);
			const texStorage2DError = gl.getError();
			console.info("texStorage2DError: " + texStorage2DError);
			expect(texStorage2DError).assertEqual(0);
			done();
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_4900
		 * @tc.name testBindBufferBase_1_01
		 * @tc.desc Test bindBufferBase.
		 */
		it('testBindBufferBase_1_01', 0, async function (done) {
			
			try {
				console.info('jsWebGL testBindBufferBase_1_01 test start ...66');
				let buffer = gl.createBuffer();
				gl2.bindBufferBase(gl.UNIFORM_BUFFER, 0, buffer);
				const bindBufferBaseError = gl.getError();
				console.info("bindBufferBaseError: " + bindBufferBaseError);
				expect(bindBufferBaseError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("bindBufferBaseError has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_5000
		 * @tc.name bindBufferRange_1_01
		 * @tc.desc Test bindBufferRange.
		 */
		it('bindBufferRange_1_01', 0, async function (done) {
			
			try {
				console.info('jsWebGL bindBufferRange_1_01 test start ...66');
				const buffer = gl.createBuffer();
				gl2.bindBufferRange(gl.UNIFORM_BUFFER, 1, buffer, 0, 4);
				const bindBufferRangeError = gl.getError();
				console.info("bindBufferRangeError: " + bindBufferRangeError);
				expect(bindBufferRangeError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("bindBufferRange has failed for " + e)
				expect(null).assertFail()
			}
		})


		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_5100
		 * @tc.name testVertexAttrib2f2
		 * @tc.desc Test vertexAttrib2f.
		 */
		it('testVertexAttrib2f2', 0, async function (done) {
			
			try {
				console.info('jsWebGL testVertexAttrib2f test start ...66');
				gl.vertexAttrib2f(1, 10.0, 10.0);
				const vertexAttrib2fError = gl.getError();
				console.info("vertexAttrib2fError: " + vertexAttrib2fError);
				expect(vertexAttrib2fError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testVertexAttrib2f has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_5200
		 * @tc.name testVertexAttrib3f2
		 * @tc.desc Test vertexAttrib3f.
		 */
		it('testVertexAttrib3f2', 0, async function (done) {
			
			try {
				console.info('jsWebGL testvertexAttrib3f test start ...66');
				console.info('jsWebGL testvertexAttrib3f test start ...' + JSON.stringify(gl));
				gl.vertexAttrib3f(1, 10.0, 10.0, 10.0);
				const vertexAttrib3fError = gl.getError();
				console.info("vertexAttrib3fError: " + vertexAttrib3fError);
				expect(vertexAttrib3fError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testVertexAttrib3f has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_5300
		 * @tc.name testVertexAttrib4f2
		 * @tc.desc Test vertexAttrib4f.
		 */
		it('testVertexAttrib4f2', 0, async function (done) {
			
			try {
				console.info('jsWebGL testVertexAttrib4f test start ...66');
				console.info('jsWebGL testVertexAttrib4f test start ...' + JSON.stringify(gl));
				gl.vertexAttrib4f(1, 10.0, 10.0, 10.0, 10.0);
				const vertexAttrib4fError = gl.getError();
				console.info("vertexAttrib4fError: " + vertexAttrib4fError);
				expect(vertexAttrib4fError).assertEqual(gl.NO_ERROR);
				
				done();
			} catch (e) {
				console.log("testvertexAttrib4f has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_5400
		 * @tc.name testVertexAttrib1f2
		 * @tc.desc Test vertexAttrib1f.
		 */
		it('testVertexAttrib1f2', 0, async function (done) {
			
			try {
				console.info('jsWebGL testVertexAttrib1f test start ...66');
				console.info('jsWebGL testVertexAttrib1f test start ...' + JSON.stringify(gl));
				gl.vertexAttrib1f(-1, 10.0);
				const vertexAttrib1fError = gl.getError();
				console.info("vertexAttrib1fError: " + vertexAttrib1fError);
				expect(vertexAttrib1fError).assertEqual(gl.INVALID_VALUE);
				
				done();
			} catch (e) {
				console.log("testVertexAttrib1f has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_5500
		 * @tc.name testVertexAttrib2f3
		 * @tc.desc Test vertexAttrib2f.
		 */
		it('testVertexAttrib2f3', 0, async function (done) {
			
			try {
				console.info('jsWebGL testVertexAttrib2f test start ...66');
				gl.vertexAttrib2f(-1, 10.0, 10.0);
				const vertexAttrib2fError = gl.getError();
				console.info("vertexAttrib2fError: " + vertexAttrib2fError);
				expect(vertexAttrib2fError).assertEqual(gl.INVALID_VALUE);
				
				done();
			} catch (e) {
				console.log("testVertexAttrib2f has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_5600
		 * @tc.name testVertexAttrib3f3
		 * @tc.desc Test vertexAttrib3f.
		 */
		it('testVertexAttrib3f3', 0, async function (done) {
			
			try {
				console.info('jsWebGL testvertexAttrib3f test start ...66');
				console.info('jsWebGL testvertexAttrib3f test start ...' + JSON.stringify(gl));
				gl.vertexAttrib3f(-1, 10.0, 10.0, 10.0);
				const vertexAttrib3fError = gl.getError();
				console.info("vertexAttrib3fError: " + vertexAttrib3fError);
				expect(vertexAttrib3fError).assertEqual(gl.INVALID_VALUE);
				
				done();
			} catch (e) {
				console.log("testVertexAttrib3f has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_5700
		 * @tc.name testVertexAttrib4f22
		 * @tc.desc Test vertexAttrib4f.
		 */
		it('testVertexAttrib4f22', 0, async function (done) {
			
			try {
				console.info('jsWebGL testVertexAttrib4f test start ...66');
				console.info('jsWebGL testVertexAttrib4f test start ...' + JSON.stringify(gl));
				gl.vertexAttrib4f(-1, 10.0, 10.0, 10.0, 10.0);
				const vertexAttrib4fError = gl.getError();
				console.info("vertexAttrib4fError: " + vertexAttrib4fError);
				expect(vertexAttrib4fError).assertEqual(gl.INVALID_VALUE);
				
				done();
			} catch (e) {
				console.log("testvertexAttrib4f has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_5800
		 * @tc.name testVertexAttribPointer2
		 * @tc.desc Test vertexAttribPointer.
		 */
		it('testVertexAttribPointer2', 0, async function (done) {
			
			try {
				console.info('jsWebGL testVertexAttribPointer test start ...66');
				console.info('jsWebGL testVertexAttribPointer test start ...' + JSON.stringify(gl));
				gl.vertexAttribPointer(1, 4, gl.BYTE, true, 20, 12);
				const vertexAttribPointerError = gl.getError();
				console.info("vertexAttribPointerError: " + vertexAttribPointerError);
				expect(vertexAttribPointerError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testVertexAttribPointer has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_5900
		 * @tc.name testVertexAttribPointer3
		 * @tc.desc Test vertexAttribPointer.
		 */
		it('testVertexAttribPointer3', 0, async function (done) {
			
			try {
				console.info('jsWebGL testVertexAttribPointer test start ...66');
				console.info('jsWebGL testVertexAttribPointer test start ...' + JSON.stringify(gl));
				gl.vertexAttribPointer(2, 2, gl.UNSIGNED_SHORT, true, 20, 16);
				const vertexAttribPointerError = gl.getError();
				console.info("vertexAttribPointerError: " + vertexAttribPointerError);
				expect(vertexAttribPointerError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testVertexAttribPointer has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_6000
		 * @tc.name testVertexAttribPointer4
		 * @tc.desc Test vertexAttribPointer.
		 */
		it('testVertexAttribPointer4', 0, async function (done) {
			
			try {
				console.info('jsWebGL testVertexAttribPointer test start ...66');
				console.info('jsWebGL testVertexAttribPointer test start ...' + JSON.stringify(gl));
				console.info("webgltest into enableVertexAttribArray");
				//顶点着色器程序
				var VSHADER_SOURCE =
					'attribute vec4 a_Position;\n' +
					'void main() {\n' +
					'  gl_Position = a_Position;\n' +
					'}\n';

				// 片元着色器程序
				var FSHADER_SOURCE =
					'precision mediump float;\n' +
					'uniform vec4 u_FragColor;\n' +
					'void main() {\n' +
					'  gl_FragColor = u_FragColor;\n' +
					'}\n';
				var vertexShader = gl.createShader(gl.VERTEX_SHADER);
				gl.shaderSource(vertexShader, VSHADER_SOURCE);
				gl.compileShader(vertexShader);
				var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
				gl.shaderSource(fragmentShader, FSHADER_SOURCE);
				gl.compileShader(fragmentShader);
				const programObj = gl.createProgram();
				console.log("testUseProgram has failed for " + programObj)
				const useProgramError1 = gl.getError();
				console.info("useProgramError: " + useProgramError1);
				const renderBufferValue1 = gl.getParameter(gl.CURRENT_PROGRAM);
				console.log("testUseProgram has failed for " + renderBufferValue1)
				gl.attachShader(programObj, vertexShader);
				gl.attachShader(programObj, fragmentShader);
				gl.linkProgram(programObj);
				gl.useProgram(programObj);
				const locPosition = gl.getAttribLocation(programObj, 'position');
				gl.vertexAttribPointer(locPosition, 3, gl.FLOAT, false, 20, 0);
				const vertexAttribPointerError = gl.getError();
				console.info("vertexAttribPointerError: " + vertexAttribPointerError);
				expect(vertexAttribPointerError).assertEqual(gl.INVALID_VALUE);
				
				done();
			} catch (e) {
				console.log("testVertexAttribPointer has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_6100
		 * @tc.name testVertexAttribPointer5
		 * @tc.desc Test vertexAttribPointer.
		 */
		it('testVertexAttribPointer5', 0, async function (done) {
			
			try {
				console.info('jsWebGL testVertexAttribPointer test start ...66');
				console.info('jsWebGL testVertexAttribPointer test start ...' + JSON.stringify(gl));
				console.info("webgltest into enableVertexAttribArray");
				//顶点着色器程序
				var VSHADER_SOURCE =
					'attribute vec4 a_Position;\n' +
					'void main() {\n' +
					'  gl_Position = a_Position;\n' +
					'}\n';

				// 片元着色器程序
				var FSHADER_SOURCE =
					'precision mediump float;\n' +
					'uniform vec4 u_FragColor;\n' +
					'void main() {\n' +
					'  gl_FragColor = u_FragColor;\n' +
					'}\n';
				var vertexShader = gl.createShader(gl.VERTEX_SHADER);
				gl.shaderSource(vertexShader, VSHADER_SOURCE);
				gl.compileShader(vertexShader);
				var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
				gl.shaderSource(fragmentShader, FSHADER_SOURCE);
				gl.compileShader(fragmentShader);
				const programObj = gl.createProgram();
				console.log("testUseProgram has failed for " + programObj)
				const useProgramError1 = gl.getError();
				console.info("useProgramError: " + useProgramError1);
				const renderBufferValue1 = gl.getParameter(gl.CURRENT_PROGRAM);
				console.log("testUseProgram has failed for " + renderBufferValue1)
				gl.attachShader(programObj, vertexShader);
				gl.attachShader(programObj, fragmentShader);
				gl.linkProgram(programObj);
				gl.useProgram(programObj);
				const locNormal = gl.getAttribLocation(programObj, 'normal');
				gl.vertexAttribPointer(locNormal, 4, gl.BYTE, true, 20, 12);
				const vertexAttribPointerError = gl.getError();
				console.info("vertexAttribPointerError: " + vertexAttribPointerError);
				expect(vertexAttribPointerError).assertEqual(gl.INVALID_VALUE);
				
				done();
			} catch (e) {
				console.log("testVertexAttribPointer has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_6200
		 * @tc.name testVertexAttribPointer6
		 * @tc.desc Test vertexAttribPointer.
		 */
		it('testVertexAttribPointer6', 0, async function (done) {
			
			try {
				console.info('jsWebGL testVertexAttribPointer test start ...66');
				console.info('jsWebGL testVertexAttribPointer test start ...' + JSON.stringify(gl));
				//顶点着色器程序
				var VSHADER_SOURCE =
					'attribute vec4 a_Position;\n' +
					'void main() {\n' +
					'  gl_Position = a_Position;\n' +
					'}\n';

				// 片元着色器程序
				var FSHADER_SOURCE =
					'precision mediump float;\n' +
					'uniform vec4 u_FragColor;\n' +
					'void main() {\n' +
					'  gl_FragColor = u_FragColor;\n' +
					'}\n';
				var vertexShader = gl.createShader(gl.VERTEX_SHADER);
				gl.shaderSource(vertexShader, VSHADER_SOURCE);
				gl.compileShader(vertexShader);
				var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
				gl.shaderSource(fragmentShader, FSHADER_SOURCE);
				gl.compileShader(fragmentShader);
				const programObj = gl.createProgram();
				console.log("testUseProgram has failed for " + programObj)
				const useProgramError1 = gl.getError();
				console.info("useProgramError: " + useProgramError1);
				const renderBufferValue1 = gl.getParameter(gl.CURRENT_PROGRAM);
				console.log("testUseProgram has failed for " + renderBufferValue1)
				gl.attachShader(programObj, vertexShader);
				gl.attachShader(programObj, fragmentShader);
				gl.linkProgram(programObj);
				gl.useProgram(programObj);
				const locTexUV = gl.getAttribLocation(programObj, 'texUV');
				gl.vertexAttribPointer(locTexUV, 2, gl.UNSIGNED_SHORT, true, 20, 16);
				const vertexAttribPointerError = gl.getError();
				console.info("vertexAttribPointerError: " + vertexAttribPointerError);
				expect(vertexAttribPointerError).assertEqual(gl.INVALID_VALUE);
				
				done();
			} catch (e) {
				console.log("testVertexAttribPointer has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_6300
		 * @tc.name testTexImage3D2
		 * @tc.desc Test texImage3D.
		 */
		it('testTexImage3D2', 0, async function (done) {
			
			try {
				console.info('jsWebGL testTexImage3D test start ...66');
				console.info('jsWebGL testTexImage3D test start ...' + JSON.stringify(gl));
				gl2.texImage3D(gl2.TEXTURE_3D, 0, gl.R8, 1, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, 0);
				const texImage3DError = gl.getError();
				console.info("texImage3DError: " + texImage3DError);
				expect(texImage3DError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testTexImage3D has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_6400
		 * @tc.name testTexImage3D3
		 * @tc.desc Test texImage3D.
		 */
		it('testTexImage3D3', 0, async function (done) {
			
			try {
				console.info('jsWebGL testTexImage3D test start ...66');
				console.info('jsWebGL testTexImage3D test start ...' + JSON.stringify(gl));
				gl2.texImage3D(gl2.TEXTURE_3D, 0, gl.LUMINANCE, 1, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE,
					0);
				const texImage3DError = gl.getError();
				console.info("texImage3DError: " + texImage3DError);
				expect(texImage3DError).assertEqual(gl.INVALID_OPERATION);
				
				done();
			} catch (e) {
				console.log("testTexImage3D has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_6500
		 * @tc.name testTexImage3D4
		 * @tc.desc Test texImage3D.
		 */
		it('testTexImage3D4', 0, async function (done) {
			
			try {
				console.info('jsWebGL testTexImage3D test start ...66');
				console.info('jsWebGL testTexImage3D test start ...' + JSON.stringify(gl));
				gl2.texImage3D(gl2.TEXTURE_3D, 0, gl.RGB8UI, 1, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, 0);
				const texImage3DError = gl.getError();
				console.info("texImage3DError: " + texImage3DError);
				expect(texImage3DError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testTexImage3D has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_6600
		 * @tc.name testTexSubImage3D_01
		 * @tc.desc Test texSubImage3D_01.
		 */
		it('testTexSubImage3D_01', 0, async function (done) {
			
			try {
				console.info('jsWebGL testTexSubImage3D_01 test start ...66');
				console.info('jsWebGL testTexSubImage3D_01 test start ...' + JSON.stringify(gl));
				gl2.texSubImage3D(gl.TEXTURE_3D, 0, 0, 0, 0, 200, 200, 1, gl.RGB8UI, gl.UNSIGNED_BYTE,
					1);
				const texSubImage3DError = gl.getError();
				console.info("texSubImage3D_01Error: " + texSubImage3DError);
				expect(texSubImage3DError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testTexSubImage3D_01 has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_6700
		 * @tc.name testTexSubImage3D_02
		 * @tc.desc Test texSubImage3D_02.
		 */
		it('testTexSubImage3D_02', 0, async function (done) {
			
			try {
				console.info('jsWebGL testTexSubImage3D_02 test start ...66');
				console.info('jsWebGL testTexSubImage3D_02 test start ...' + JSON.stringify(gl));
				gl2.texSubImage3D(gl.TEXTURE_3D, 0, 0, 0, 0, 200, 200, 1, gl.R8, gl.UNSIGNED_BYTE, 1);
				const texSubImage3DError = gl.getError();
				console.info("texSubImage3D_02Error: " + texSubImage3DError);
				expect(texSubImage3DError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testTexSubImage3D_02 has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_6800
		 * @tc.name testTexSubImage3D_03
		 * @tc.desc Test texSubImage3D_03.
		 */
		it('testTexSubImage3D_03', 0, async function (done) {
			
			try {
				console.info('jsWebGL testTexSubImage3D_03 test start ...66');
				console.info('jsWebGL testTexSubImage3D_03 test start ...' + JSON.stringify(gl));
				gl2.texSubImage3D(gl.TEXTURE_3D, 0, 0, 0, 0, 200, 200, 1, gl.LUMINANCE, gl
					.UNSIGNED_BYTE, 1);
				const texSubImage3DError = gl.getError();
				console.info("texSubImage3D_03Error: " + texSubImage3DError);
				expect(texSubImage3DError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testTexSubImage3D_03 has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_6900
		 * @tc.name testCompressedTexImage3D_01
		 * @tc.desc Test compressedTexImage3D_01.
		 */
		it('testCompressedTexImage3D_01', 0, async function (done) {
			
			try {
				console.info('jsWebGL testCompressedTexImage3D_01 test start ...66');
				console.info('jsWebGL testCompressedTexImage3D_01 test start ...' + JSON.stringify(gl));
				const buffer = new ArrayBuffer(8);
				gl2.compressedTexImage3D(gl.TEXTURE_3D, 0, 0x83F0, 512, 512, 0, buffer);
				const compressedTexImage3DError = gl.getError();
				console.info("compressedTexImage3D_01Error: " + compressedTexImage3DError);
				expect(compressedTexImage3DError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testCompressedTexImage3D_01 has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_7000
		 * @tc.name testCompressedTexImage3D_02
		 * @tc.desc Test compressedTexImage3D_02.
		 */
		it('testCompressedTexImage3D_02', 0, async function (done) {
			
			try {
				console.info('jsWebGL testCompressedTexImage3D_02 test start ...66');
				console.info('jsWebGL testCompressedTexImage3D_02 test start ...' + JSON.stringify(gl));
				const buffer = new ArrayBuffer(8);
				gl2.compressedTexImage3D(gl.TEXTURE_3D, 0, 0x83F0, 512, 512, 0, buffer, 0, 0);
				const compressedTexImage3DError = gl.getError();
				console.info("compressedTexImage3D_02Error: " + compressedTexImage3DError);
				expect(compressedTexImage3DError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testCompressedTexImage3D_02 has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_7100
		 * @tc.name testCompressedTexImage3D_03
		 * @tc.desc Test compressedTexImage3D_03.
		 */
		it('testCompressedTexImage3D_03', 0, async function (done) {
			
			try {
				console.info('jsWebGL testCompressedTexImage3D_03 test start ...66');
				console.info('jsWebGL testCompressedTexImage3D_03 test start ...' + JSON.stringify(gl));
				gl2.compressedTexImage3D(gl.TEXTURE_3D, 0, 0x83F0, 512, 512, 0, gl2.PIXEL_UNPACK_BUFFER,
					0);
				const compressedTexImage3DError = gl.getError();
				console.info("compressedTexImage3D_03Error: " + compressedTexImage3DError);
				expect(compressedTexImage3DError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testCompressedTexImage3D_03 has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_7200
		 * @tc.name testCompressedTexImage3D_04
		 * @tc.desc Test compressedTexImage3D_04.
		 */
		it('testCompressedTexImage3D_04', 0, async function (done) {
			
			try {
				console.info('jsWebGL testCompressedTexImage3D_04 test start ...66');
				console.info('jsWebGL testCompressedTexImage3D_04 test start ...' + JSON.stringify(gl));
				const buffer = new ArrayBuffer(8);
				gl2.compressedTexImage3D(gl.TEXTURE_3D, false, 0x83F0, 512, 512, 0, buffer);
				const compressedTexImage3DError = gl.getError();
				console.info("compressedTexImage3D_04Error: " + compressedTexImage3DError);
				expect(compressedTexImage3DError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testCompressedTexImage3D_04 has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_7300
		 * @tc.name testCompressedTexImage3D_05
		 * @tc.desc Test compressedTexImage3D_05.
		 */
		it('testCompressedTexImage3D_05', 0, async function (done) {
			
			try {
				console.info('jsWebGL testCompressedTexImage3D_05 test start ...66');
				console.info('jsWebGL testCompressedTexImage3D_05 test start ...' + JSON.stringify(gl));
				const buffer = new ArrayBuffer(8);
				gl2.compressedTexImage3D(gl.TEXTURE_3D, false, 0x83F0, 512, 512, 0, buffer, 0, 0);
				const compressedTexImage3DError = gl.getError();
				console.info("compressedTexImage3D_05Error: " + compressedTexImage3DError);
				expect(compressedTexImage3DError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testCompressedTexImage3D_05 has failed for " + e)
				expect(null).assertFail()
			}
		})

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_7400
		 * @tc.name testCompressedTexImage3D_06
		 * @tc.desc Test compressedTexImage3D_06.
		 */
		it('testCompressedTexImage3D_06', 0, async function (done) {
			
			try {
				console.info('jsWebGL testCompressedTexImage3D_06 test start ...66');
				console.info('jsWebGL testCompressedTexImage3D_06 test start ...' + JSON.stringify(gl));
				gl2.compressedTexImage3D(gl.TEXTURE_3D, false, 0x83F0, 512, 512, 0, gl2
					.PIXEL_UNPACK_BUFFER, 0);
				const compressedTexImage3DError = gl.getError();
				console.info("compressedTexImage3D_06Error: " + compressedTexImage3DError);
				expect(compressedTexImage3DError).assertEqual(0);
				
				done();
			} catch (e) {
				console.log("testCompressedTexImage3D_06 has failed for " + e)
				expect(null).assertFail()
			}
		})


		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_7500
		 * @tc.name testFrontFace2
		 * @tc.desc Test frontFace.
		 */
		it('testFrontFace2', 0, async function (done) {
			
			console.info('jsWebGL frontFace test start ...' + JSON.stringify(gl));
			gl.enable(gl.CULL_FACE);
			gl.cullFace(gl.FRONT_AND_BACK);
			gl.frontFace(gl.CCW);
			const frontFaceParameter = gl.getParameter(gl.CULL_FACE_MODE);
			console.info('frontFace -> frontFaceParameter' + frontFaceParameter);
			gl.disable(gl.CULL_FACE);
			expect(frontFaceParameter).assertEqual(gl.FRONT_AND_BACK);
			done();
		});


		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_7600
		 * @tc.name testGenerateMipmap2
		 * @tc.desc Test generateMipmap.
		 */
		it('testGenerateMipmap2', 0, async function (done) {
			
			console.info('jsWebGL generateMipmap test start ...' + JSON.stringify(gl));
			gl.generateMipmap(gl2.TEXTURE_CUBE_MAP);
			const error = gl.getError();
			console.info('generateMipmap error ' + error);
			expect(error).assertEqual(0);
			done();
		});

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_7700
		 * @tc.name testGetFramebufferAttachmentParameter2
		 * @tc.desc Test getFramebufferAttachmentParameter.
		 */
		it('testGetFramebufferAttachmentParameter2', 0, async function (done) {
			
			console.info('jsWebGL getFramebufferAttachmentParameter test start ...' + JSON.stringify(
				gl));
			const renderBuffer = gl.createRenderbuffer();
			gl.bindRenderbuffer(gl.RENDERBUFFER, renderBuffer);
			gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER,
				renderBuffer);
			const framebuffer = gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl
				.STENCIL_ATTACHMENT,
			gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
			console.info('Framebuffer' + framebuffer);
			const errorCode = gl.getError();
			console.info("jsWebGL getFramebufferAttachmentParameter errorCode: " + errorCode);
			expect(errorCode).assertEqual(0);
			done();
		});

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_7800
		 * @tc.name testGetFramebufferAttachmentParameter3
		 * @tc.desc Test getFramebufferAttachmentParameter.
		 */
		it('testGetFramebufferAttachmentParameter3', 0, async function (done) {
			
			console.info('jsWebGL getFramebufferAttachmentParameter test start ...' + JSON.stringify(
				gl));
			const renderBuffer = gl.createRenderbuffer();
			gl.bindRenderbuffer(gl.RENDERBUFFER, renderBuffer);
			gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.RENDERBUFFER,
				renderBuffer);
			const framebuffer = gl.getFramebufferAttachmentParameter(gl.FRAMEBUFFER, gl
				.DEPTH_STENCIL_ATTACHMENT,
			gl.FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE);
			console.info('Framebuffer' + framebuffer);
			const errorCode = gl.getError();
			console.info("jsWebGL getFramebufferAttachmentParameter errorCode: " + errorCode);
			expect(errorCode).assertEqual(0);
			done();
		});

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_7900
		 * @tc.name testGetShaderPrecisionFormat1
		 * @tc.desc Test getShaderPrecisionFormat.
		 */
		it('testGetShaderPrecisionFormat1', 0, async function (done) {
			
			console.info('jsWebGL getShaderPrecisionFormat test start ...' + JSON.stringify(gl));
			const shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_FLOAT);
			console.info('shaderPrecisionFormat' + JSON.stringify(shaderPrecisionFormat));
			const type = ((typeof shaderPrecisionFormat) === "object")
			expect(type).assertEqual(true);
			done();
		});

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_8000
		 * @tc.name testGetShaderPrecisionFormat2
		 * @tc.desc Test getShaderPrecisionFormat.
		 */
		it('testGetShaderPrecisionFormat2', 0, async function (done) {
			
			console.info('jsWebGL getShaderPrecisionFormat test start ...' + JSON.stringify(gl));
			const shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl
				.HIGH_FLOAT);
			console.info('shaderPrecisionFormat' + JSON.stringify(shaderPrecisionFormat));
			const type = ((typeof shaderPrecisionFormat) === "object")
			expect(type).assertEqual(true);
			done();
		});

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_8100
		 * @tc.name testGetShaderPrecisionFormat3
		 * @tc.desc Test getShaderPrecisionFormat.
		 */
		it('testGetShaderPrecisionFormat3', 0, async function (done) {
			
			console.info('jsWebGL getShaderPrecisionFormat test start ...' + JSON.stringify(gl));
			const shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl.LOW_INT);
			console.info('shaderPrecisionFormat' + JSON.stringify(shaderPrecisionFormat));
			const type = ((typeof shaderPrecisionFormat) === "object")
			expect(type).assertEqual(true);
			done();
		});

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_8200
		 * @tc.name testGetShaderPrecisionFormat4
		 * @tc.desc Test getShaderPrecisionFormat.
		 */
		it('testGetShaderPrecisionFormat4', 0, async function (done) {
			
			console.info('jsWebGL getShaderPrecisionFormat test start ...' + JSON.stringify(gl));
			const shaderPrecisionFormat = gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER, gl
				.MEDIUM_INT);
			console.info('shaderPrecisionFormat' + JSON.stringify(shaderPrecisionFormat));
			const type = ((typeof shaderPrecisionFormat) === "object")
			expect(type).assertEqual(true);
			done();
		});

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_8300
		 * @tc.name testGetTexParameter3
		 * @tc.desc Test getTexParameter.
		 */
		it('testGetTexParameter3', 0, async function (done) {
			
			console.info('jsWebGL getTexParameter test start ...' + JSON.stringify(gl));
			gl.texParameterf(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
			const texParameterValue = gl.getTexParameter(gl.TEXTURE_CUBE_MAP, gl.TEXTURE_MAG_FILTER);
			console.info('texParameterfValue' + texParameterValue);
			expect(texParameterValue).assertEqual(gl.LINEAR);
			done();
		});

		/**
		 * @tc.number SUB_BASIC_GRAPHICS_SPECIAL_XTS_WEBGL_10_8400
		 * @tc.name testGetActiveUniformBlockParameter1
		 * @tc.desc Test getActiveUniformBlockParameter.
		 */
		it('testGetActiveUniformBlockParameter1', 0, async function (done) {
			
			console.info('jsWebGL2 getActiveUniformBlockParameter test start ...' + JSON.stringify(
				gl2));
			const program = globalFunction();
			const uniformLocation = gl.getUniformLocation(program, "a_Position");
			const int32Array = new Int32Array([1, 2]);
			gl2.uniform1iv(uniformLocation, int32Array);
			const blockIndex = gl2.getUniformBlockIndex(program, 'a_Position');
			gl2.uniformBlockBinding(program, blockIndex, 1);
			const blockSize = gl2.getActiveUniformBlockParameter(program, blockIndex,
			gl.UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER);
			console.info("getActiveUniformBlockParameter blockSize" + blockSize);
			const errorCode = gl.getError();
			console.info("jsWebGL getActiveUniformBlockParameter errorCode: " + errorCode);
			expect(errorCode).assertEqual(gl.INVALID_VALUE);
			done();
		});
	})
}